bitkeeper revision 1.1159.116.4 (4177df97ZOvl759Lo38Gv7CY081ZCA)
authormjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Thu, 21 Oct 2004 16:11:03 +0000 (16:11 +0000)
committermjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Thu, 21 Oct 2004 16:11:03 +0000 (16:11 +0000)
Add resource control parameter to migrate.

tools/libxc/xc_io.h
tools/python/xen/xend/XendClient.py
tools/python/xen/xend/XendDomain.py
tools/python/xen/xend/XendMigrate.py
tools/python/xen/xend/server/SrvDomain.py
tools/python/xen/xm/migrate.py
tools/xfrd/xen_domain.c
tools/xfrd/xen_domain.h
tools/xfrd/xfrd.c

index 4feca0b358434012283e6dd0572e7fd3bccd324b..341f29be6077e2d31a6a5e08cf4308e8f8c668ec 100644 (file)
@@ -8,6 +8,7 @@
 typedef struct XcIOContext {
     u32 domain;
     unsigned flags;
+    int resource;
     IOStream *io;
     IOStream *info;
     IOStream *err;
index 4ebb6acbea13ec7438192beeb1636fed36a61289..4a9d265a0f0306af956df40d88da20ee94288464 100644 (file)
@@ -244,11 +244,12 @@ class Xend:
                              {'op'      : 'save',
                               'file'    : filename })
 
-    def xend_domain_migrate(self, id, dst, live=0):
+    def xend_domain_migrate(self, id, dst, live=0, resource=0):
         return self.xendPost(self.domainurl(id),
                              {'op'         : 'migrate',
                               'destination': dst,
-                              'live'       : live })
+                              'live'       : live,
+                              'resource'   : resource })
 
     def xend_domain_pincpu(self, id, cpu):
         return self.xendPost(self.domainurl(id),
index 5532d5b98f29c34b5fe7edcd0ff4dc1e7169e5e6..a7574144834d25e49f5a58e9b46efd77b285a84e 100644 (file)
@@ -594,7 +594,7 @@ class XendDomain:
         self.refresh_schedule()
         return val
 
-    def domain_migrate(self, id, dst, live):
+    def domain_migrate(self, id, dst, live=0, resource=0):
         """Start domain migration.
 
         @param id: domain id
@@ -604,7 +604,7 @@ class XendDomain:
         # Don't forget to cancel restart for it.
         dominfo = self.domain_lookup(id)
         xmigrate = XendMigrate.instance()
-        val = xmigrate.migrate_begin(dominfo, dst, live=live)
+        val = xmigrate.migrate_begin(dominfo, dst, live=live, resource=resource)
         return val
 
     def domain_save(self, id, dst, progress=0):
index f1bcf67c67385949733159517f32d0e1ca1cae45..a1c261deb5dfe2b542ab64e57c6d4523532181f8 100644 (file)
@@ -260,7 +260,7 @@ class XendMigrateInfo(XfrdInfo):
     """Representation of a migrate in-progress and its interaction with xfrd.
     """
 
-    def __init__(self, xid, dominfo, host, port, live):
+    def __init__(self, xid, dominfo, host, port, live=0, resource=0):
         XfrdInfo.__init__(self)
         self.xid = xid
         self.dominfo = dominfo
@@ -271,13 +271,15 @@ class XendMigrateInfo(XfrdInfo):
         self.dst_port = port
         self.dst_dom = None
         self.live = live
+        self.resource = resource
         self.start = 0
         
     def sxpr(self):
         sxpr = ['migrate',
                 ['id',    self.xid   ],
                 ['state', self.state ],
-                ['live',  self.live  ] ]
+                ['live',  self.live  ],
+                ['resource', self.resource] ]
         sxpr_src = ['src', ['host', self.src_host], ['domain', self.src_dom] ]
         sxpr.append(sxpr_src)
         sxpr_dst = ['dst', ['host', self.dst_host] ]
@@ -300,7 +302,8 @@ class XendMigrateInfo(XfrdInfo):
                       vmconfig,
                       self.dst_host,
                       self.dst_port,
-                      self.live ])
+                      self.live,
+                      self.resource ])
         
 ##     def xfr_vm_suspend(self, xfrd, val):
 ##         def cbok(val):
@@ -490,7 +493,7 @@ class XendMigrate:
         reactor.connectTCP('localhost', XFRD_PORT, xcf)
         return info.deferred
     
-    def migrate_begin(self, dominfo, host, port=XFRD_PORT, live=0):
+    def migrate_begin(self, dominfo, host, port=XFRD_PORT, live=0, resource=0):
         """Begin to migrate a domain to another host.
 
         @param dominfo:  domain info
@@ -499,7 +502,7 @@ class XendMigrate:
         @return: deferred
         """
         xid = self.nextid()
-        info = XendMigrateInfo(xid, dominfo, host, port, live)
+        info = XendMigrateInfo(xid, dominfo, host, port, live, resource)
         return self.session_begin(info)
 
     def save_begin(self, dominfo, file):
index a0ec17526f346e3390508cb96a8833c31fbb6df5..f25324470b14df82833e34dd213c8bd66ac6e78d 100644 (file)
@@ -81,7 +81,8 @@ class SrvDomain(SrvDir):
         fn = FormFn(self.xd.domain_migrate,
                     [['dom', 'str'],
                      ['destination', 'str'],
-                     ['live', 'int']])
+                     ['live', 'int'],
+                     ['resource', 'int']])
         deferred = fn(req.args, {'dom': self.dom.id})
         print 'op_migrate>', deferred
         deferred.addCallback(self._op_migrate_cb, req)
index 366fb5f694c9366cc7182b962362ef00da8d8746..070905bc1146bb28d70a0436b82b93b1d81daf7b 100644 (file)
@@ -26,6 +26,10 @@ gopts.opt('live', short='l',
           fn=set_true, default=0,
           use="Use live migration.")
 
+gopts.opt('resource', short='r',
+          fn=set_int, default=0,
+          use="Set level of resource usage for migration.")
+
 def help(argv):
     gopts.argv = argv
     gopts.usage()
@@ -42,5 +46,5 @@ def main(argv):
     dst = args[1]
     if dom in [DOM0_NAME, DOM0_ID]:
         opts.err('Cannot migrate ' + dom)
-    server.xend_domain_migrate(dom, dst, opts.vals.live)
+    server.xend_domain_migrate(dom, dst, opts.vals.live, opts.vals.resource)
         
index 453614d8fe49fa65456c866c60b70764ce49014d..abc7b7dc3c0c2eb34c122cf6cd98e464003a220a 100644 (file)
@@ -60,7 +60,7 @@ void xcfini(void){
 int xen_domain_snd(Conn *xend, IOStream *io,
                    uint32_t dom,
                    char *vmconfig, int vmconfig_n,
-                   int live){
+                   int live, int resource){
     int err = 0;
 #ifdef _XEN_XFR_STUB_
     char buf[1024];
@@ -99,6 +99,7 @@ int xen_domain_snd(Conn *xend, IOStream *io,
     if(live){
         ioctxt->flags |= XCFLAGS_LIVE;
     }
+    ioctxt->resource = resource;
     err = xc_linux_save(xcinit(), ioctxt);
 #endif   
     dprintf("< err=%d\n", err);
index 2ea66b743e46d77e5bbcc590d6b0ba611d17aa4f..c84e8b8d634b597341ef74f2a1c13abfda81b794 100644 (file)
@@ -10,7 +10,7 @@
 extern int xen_domain_snd(Conn *xend, IOStream *io,
                           uint32_t dom,
                           char *vmconfig, int vmconfig_n,
-                          int live);
+                          int live, int resource);
 extern int xen_domain_rcv(IOStream *io,
                           uint32_t *dom,
                           char **vmconfig, int *vmconfig_n,
index 5da736f6a95d649e6f95ff9ff7057a4cee2583eb..236b67755badf8d3bc1148477d586fc1a02c63ee 100644 (file)
@@ -96,7 +96,7 @@ receiver:
 Sxpr oxfr_configure; // (xfr.configure <vmid> <vmconfig>)
 Sxpr oxfr_err;       // (xfr.err <code>)
 Sxpr oxfr_hello;     // (xfr.hello <major> <minor>)
-Sxpr oxfr_migrate;   // (xfr.migrate <vmid> <vmconfig> <host> <port> <live>)
+Sxpr oxfr_migrate;   // (xfr.migrate <vmid> <vmconfig> <host> <port> <live> <resource>)
 Sxpr oxfr_migrate_ok;// (xfr.migrate.ok <value>)
 Sxpr oxfr_progress;  // (xfr.progress <percent> <rate: kb/s>)
 Sxpr oxfr_restore;   // (xfr.restore <file>)
@@ -241,6 +241,7 @@ typedef struct XfrState {
     char *xfr_host;
     uint32_t vmid_new;
     int live;
+    int resource;
 } XfrState;
 
 /** Get the name of a transfer state.
@@ -623,7 +624,7 @@ int xfr_send_state(XfrState *state, Conn *xend, Conn *peer){
     err = xen_domain_snd(xend, peer->out,
                          state->vmid,
                          state->vmconfig, state->vmconfig_n,
-                         state->live);
+                         state->live, state->resource);
     dprintf(">*** Sent domain %u\n", state->vmid);
     if(err) goto exit;
     // Sending the domain suspends it, and there's no way back.
@@ -771,7 +772,7 @@ int xfr_save(Args *args, XfrState *state, Conn *xend, char *file){
     err = xen_domain_snd(xend, io,
                          state->vmid,
                          state->vmconfig, state->vmconfig_n,
-                         0);
+                         0, 0);
     if(err){
         err = xfr_error(xend, err);
     } else {
@@ -926,6 +927,8 @@ int xfrd_service(Args *args, int peersock, struct sockaddr_in peer_in){
         if(err) goto exit;
         err = intof(sxpr_childN(sxpr, n++, ONONE), &state->live);
         if(err) goto exit;
+        err = intof(sxpr_childN(sxpr, n++, ONONE), &state->resource);
+        if(err) goto exit;
         err = xfr_send(args, state, conn, addr, port);
 
     } else if(sxpr_elementp(sxpr, oxfr_save)){